package sv.com.action.buque;

import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;

import net.sf.json.JSONObject;

import sv.com.action.comun.ComunAction;
import sv.com.modelo.buque.AuditBuque;
import sv.com.modelo.buque.Buque;
import sv.com.modelo.buque.MotorBuque;
import sv.com.modelo.buque.ServicioBuque;
import sv.com.modelo.buque.TipoBuqueEmb;
import sv.com.modelo.catalogos.MaterialCasco;
import sv.com.modelo.embarcacion.AuditPersonaXRegistroBuque;
import sv.com.modelo.embarcacion.PersonaBuquePk;
import sv.com.modelo.embarcacion.PersonaXRegistroBuque;
import sv.com.modelo.embarcacion.Puerto;
import sv.com.modelo.persona.Persona;
import sv.com.objetos.auxiliares.Cadena;
import sv.com.objetos.auxiliares.Constantes;
import sv.com.objetos.auxiliares.Consulta;
import sv.com.objetos.auxiliares.Fecha;
import sv.com.objetos.auxiliares.Listas;
import sv.com.objetos.auxiliares.UsuarioLogueado;
import sv.com.objetos.jqgrid.JQGridJSONModel;
import sv.com.objetos.jqgrid.JQGridRow;
import sv.com.servicio.generico.DaoGenerico;

public class BuqueAction extends ComunAction {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	

	public void mapaDeMetodos(){
		String metodo=getOper();
		if(metodo==null) metodo = CONS;
		if(metodo.equals("cargarBuques")) cargarGridBuque();
		else if(metodo.equals("datosBuques")) datosBuques();
		else if(metodo.equals(AGR)) agregar();
		else if(metodo.equals(MOD)) modificar();
		else if(metodo.equals("eliminarDuenos")) eliminoDuennos();
		else if(metodo.equals("pathBuque")) guardarPath();
	}
	
	
	public void guardarPath(){
		HashMap<String, Object> parametros = new HashMap<String, Object>();
		ArrayList<String> propiedades=new ArrayList<String>();
		ArrayList<Object> valores = new ArrayList<Object>();
		ArrayList<String> tiposConsulta = new ArrayList<String>();
		String idBuque  = getServletRequest().getParameter("idbuque");
		String foto  = getServletRequest().getParameter("nomArchivo");
		
		propiedades.add("idRegistroBuque");
		valores.add(idBuque);
		tiposConsulta.add(Consulta.IGUAL);
		List<Buque> lista=null;
		
		parametros.put("propiedades", Listas.pasarListaArregloString(propiedades));
		parametros.put("valores", Listas.pasarListaArregloObjeto(valores));
		parametros.put("tiposConsulta", Listas.pasarListaArregloString(tiposConsulta));
		parametros.put("ordenarPor", "idRegistroBuque asc");
		
		try {
			lista=servicioGenerico.cargarTodosV2(Buque.class, parametros, Constantes.SIN_LIMITE, Constantes.SIN_LIMITE);
			Buque bb= lista.get(0);
			
			bb.setFoto(foto);
			
			servicioGenerico.modificar(bb);
		
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			enviarMensajeStatic("error~"+e.getCause().toString(), getServletResponse());
		}
		
		
	
	}

	public void eliminoDuennos(){
		List<PersonaXRegistroBuque> listaPerBuq=null;
		String idPer = getServletRequest().getParameter("idPersona");
		String idBuque = getServletRequest().getParameter("idBuque");
		HashMap<String, Object> parametros2 = new HashMap<String, Object>();
		ArrayList<String> propiedades2=new ArrayList<String>();
		ArrayList<Object> valores2 = new ArrayList<Object>();
		ArrayList<String> tiposConsulta2 = new ArrayList<String>();
		
		propiedades2.add("personaBuquePk.idPersona");
		valores2.add(new Long(idPer));
		tiposConsulta2.add(Consulta.IGUAL);
		
		
		propiedades2.add("personaBuquePk.idRegistroBuque");
		valores2.add(new Long(idBuque));
		tiposConsulta2.add(Consulta.IGUAL);
		
		parametros2.put("propiedades", Listas.pasarListaArregloString(propiedades2));
		parametros2.put("valores", Listas.pasarListaArregloObjeto(valores2));
		parametros2.put("tiposConsulta", Listas.pasarListaArregloString(tiposConsulta2));
		parametros2.put("ordenarPor", "personaBuquePk.idPersona asc");
		
		try {
			listaPerBuq=servicioGenerico.cargarTodosV2(PersonaXRegistroBuque.class, parametros2, Constantes.SIN_LIMITE, Constantes.SIN_LIMITE);
			
			PersonaXRegistroBuque bxp = listaPerBuq.get(0);
			servicioGenerico.eliminar(bxp);
		
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			enviarMensajeStatic("error~"+e.getCause().toString(), getServletResponse());
		}
	
	}
	
	public void datosBuques(){
		try{
			
			List<Buque> lista=null;
			List<PersonaXRegistroBuque> listaPerBuq=null;
			List<Persona> listaPer=null;
			
			String idBuque = getServletRequest().getParameter("idBuque");
			HashMap<String, Object> parametros = new HashMap<String, Object>();
			ArrayList<String> propiedades=new ArrayList<String>();
			ArrayList<Object> valores = new ArrayList<Object>();
			ArrayList<String> tiposConsulta = new ArrayList<String>();
			
			propiedades.add("idRegistroBuque");
			valores.add(idBuque);
			tiposConsulta.add(Consulta.IGUAL);
			
			
			parametros.put("propiedades", Listas.pasarListaArregloString(propiedades));
			parametros.put("valores", Listas.pasarListaArregloObjeto(valores));
			parametros.put("tiposConsulta", Listas.pasarListaArregloString(tiposConsulta));
			parametros.put("ordenarPor", "idRegistroBuque asc");
			
			lista=servicioGenerico.cargarTodosV2(Buque.class, parametros, Constantes.SIN_LIMITE, Constantes.SIN_LIMITE);
			
			Buque bb= lista.get(0);
			
			///PARTE PARA RECONSTRUIR PERSONAS POR BUQUE
			HashMap<String, Object> parametros2 = new HashMap<String, Object>();
			ArrayList<String> propiedades2=new ArrayList<String>();
			ArrayList<Object> valores2 = new ArrayList<Object>();
			ArrayList<String> tiposConsulta2 = new ArrayList<String>();
			
			
			
			propiedades2.add("personaBuquePk.idRegistroBuque");
			valores2.add(new Long(idBuque));
			tiposConsulta2.add(Consulta.IGUAL);
			
			parametros2.put("propiedades", Listas.pasarListaArregloString(propiedades2));
			parametros2.put("valores", Listas.pasarListaArregloObjeto(valores2));
			parametros2.put("tiposConsulta", Listas.pasarListaArregloString(tiposConsulta2));
			parametros2.put("ordenarPor", "personaBuquePk.idPersona asc");
			
			listaPerBuq=servicioGenerico.cargarTodosV2(PersonaXRegistroBuque.class, parametros2, Constantes.SIN_LIMITE, Constantes.SIN_LIMITE);
			
			String html="";
			int conta =1;
			double total = 0;
			for(PersonaXRegistroBuque pxb:listaPerBuq){
				HashMap<String, Object> parametros3 = new HashMap<String, Object>();
				ArrayList<String> propiedades3=new ArrayList<String>();
				ArrayList<Object> valores3 = new ArrayList<Object>();
				ArrayList<String> tiposConsulta3 = new ArrayList<String>();
				
				
				propiedades3.add("idPersona");
				valores3.add(new Long(pxb.getPersonaBuquePk().getIdPersona()));
				tiposConsulta3.add(Consulta.IGUAL);
				
				parametros2.put("propiedades", Listas.pasarListaArregloString(propiedades3));
				parametros2.put("valores", Listas.pasarListaArregloObjeto(valores3));
				parametros2.put("tiposConsulta", Listas.pasarListaArregloString(tiposConsulta3));
				parametros2.put("ordenarPor", "idPersona asc");
				
				listaPer =servicioGenerico.cargarTodosV2(Persona.class, parametros2, Constantes.SIN_LIMITE, Constantes.SIN_LIMITE);
				
				Persona pp= listaPer.get(0);
				
				html = html + "<tr id='tr"+conta+"'> ";
				html  = html + "<td><input type='hidden' name='hdVal"+conta+"' id='hdVal"+conta+"' value='"+pxb.getPersonaBuquePk().getIdPersona()+"'> </td>";		 
				html  = html + "<td><input type='text' name='nombreVal"+conta+"' id='nombreVal"+conta+"' value='"+pp.getNombrePersona()+"'> </td>";
				html  = html + "<td><input type='text' name='porcentajeVal"+conta+"' id='porcentajeVal"+conta+"' value='"+pxb.getPorcentaje()+"'> </td>";
//				html  = html + "<td><input class='agrego' type='button' onclick='javascript:validarPorCiento("+conta+")'></td>";
				html  = html + "<td><input class='delete' type='button' onclick='javascript:eliminarDuenno("+conta+","+pxb.getPersonaBuquePk().getIdPersona()+","+pxb.getPersonaBuquePk().getIdRegistroBuque()+")'></td>";
				html  = html + "</tr>";
				total = total +pxb.getPorcentaje();
				conta++;
			}
			
			HashMap<String, Object> retorno = new HashMap<String, Object>();
			
			
			retorno.put("total", total);
			retorno.put("duennos", html);
			retorno.put("buques",bb);
			retorno.put("contador",conta);
			JSONObject o = JSONObject.fromObject(retorno);
			enviarJsonNavegador(o);
		}catch (Exception e) {
			e.printStackTrace();
			enviarMensajeStatic("error~"+e.getCause().toString(), getServletResponse());
		}
	}

	
	public void cargarGridBuque(){
		try{
			JQGridJSONModel json= new JQGridJSONModel();
			int pagina = getPage();
			int bloque = getRows();
			
			String nombreBuque = getServletRequest().getParameter("nombreBuque");
			String numeroOficial = getServletRequest().getParameter("numeroOficial");
			List<JQGridRow> rows = new ArrayList<JQGridRow>();
			
			Integer totalColumnas = new Integer(0);
			List<Buque> lista=null;
			String idBuque = getServletRequest().getParameter("idBuque");
			HashMap<String, Object> parametros = new HashMap<String, Object>();
			ArrayList<String> propiedades=new ArrayList<String>();
			ArrayList<Object> valores = new ArrayList<Object>();
			ArrayList<String> tiposConsulta = new ArrayList<String>();
			
			if(get_search()){
//				HashMap<String, Object> filtros=obtenerFiltros();
//				propiedades.addAll((ArrayList)filtros.get("propiedades"));
//				valores.addAll((ArrayList)filtros.get("valores"));
//				tiposConsulta.addAll((ArrayList)filtros.get("tiposConsulta"));
				if(Cadena.noVacio(nombreBuque)){ propiedades.add("nombreBuque"); valores.add(nombreBuque); tiposConsulta.add(Consulta.LIKE); }
				if(Cadena.noVacio(numeroOficial)){ propiedades.add("numeroOficial"); valores.add(numeroOficial); tiposConsulta.add(Consulta.IGUAL); }
				
			}

			parametros.put("propiedades", Listas.pasarListaArregloString(propiedades));
			parametros.put("valores", Listas.pasarListaArregloObjeto(valores));
			parametros.put("tiposConsulta", Listas.pasarListaArregloString(tiposConsulta));
			parametros.put("ordenarPor", "idRegistroBuque asc");
			
			totalColumnas = servicioGenerico.tamanoTotalListaCargarTodosV2(Buque.class, parametros);
			lista=servicioGenerico.cargarTodosV2(Buque.class, parametros, pagina, bloque);
			
			json.setRecords(totalColumnas);
			JQGridRow row = null; 
			List<String> cells = null; 
			for(Buque objeto:lista){
				row = new JQGridRow(); 
				cells = new ArrayList<String>();
				row.setId(objeto.getIdRegistroBuque());
				cells.add(objeto.getIdRegistroBuque()+"");
				cells.add(objeto.getNombreBuque());
				cells.add(objeto.getNumeroOficial());
				
				row.setCell(cells); 
				rows.add(row);
			}
			json.setPage(String.valueOf(pagina)); 
			json.setTotal(String.valueOf(Constantes.calcularNumeroPaginas(totalColumnas,getRows())));
			json.setRows(rows);
			
			JSONObject o = JSONObject.fromObject(json);
			enviarJsonNavegador(o);
		}catch (Exception e) {
			e.printStackTrace();
			enviarMensajeStatic("error~"+e.getCause().toString(), getServletResponse());
		}
	}
	
	public void modificar(){
		Buque buque  = new Buque();
		AuditBuque auditBuque = new AuditBuque();
		List<Buque> listaBuq = new ArrayList<Buque>();
		String nombreBuque = getServletRequest().getParameter("nombreBuque2");
		String idTipoBuqueEmb = getServletRequest().getParameter("idTipoBuqueEmb");
		String numeroOficial = getServletRequest().getParameter("numeroOficial2");
		String numeroOmi = getServletRequest().getParameter("numeroOmi");
		String claseMaquina = getServletRequest().getParameter("claseMaquina");
		String fabricante = getServletRequest().getParameter("fabricante");
		String modelo = getServletRequest().getParameter("modelo");
		String marca = getServletRequest().getParameter("marca");
		String velocidadBuque = getServletRequest().getParameter("velocidadBuque");
		String numeroCilindros = getServletRequest().getParameter("numeroCilindros");
		String potencia = getServletRequest().getParameter("potencia");
		String noMaquinas = getServletRequest().getParameter("noMaquinas");
		String manga = getServletRequest().getParameter("manga");
		String calado = getServletRequest().getParameter("calado");
		String puntal = getServletRequest().getParameter("puntal");
		String medidas = getServletRequest().getParameter("medidas");
		String eslora = getServletRequest().getParameter("eslora");
		String color = getServletRequest().getParameter("color");
		String idMaterial = getServletRequest().getParameter("idMaterial");
		String anioQuilla = getServletRequest().getParameter("anioQuilla");
		String anioConstruccion = getServletRequest().getParameter("anioConstruccion");
		String trb = getServletRequest().getParameter("trb");
		String trn = getServletRequest().getParameter("trn");
		String distintivoLlamada = getServletRequest().getParameter("distintivoLlamada");
		String idServicioBuque = getServletRequest().getParameter("idServicioBuque");
		String idPuerto = getServletRequest().getParameter("idPuerto");
		String ubicacionFisica = getServletRequest().getParameter("ubicacionFisica");
		String dotacioMinima = getServletRequest().getParameter("dotacioMinima");
		String combustible = getServletRequest().getParameter("combustible");
		String construidoEn = getServletRequest().getParameter("construidoEn");
		String constructor = getServletRequest().getParameter("constructor");
		String contador = getServletRequest().getParameter("contador");
		String idBuque = getServletRequest().getParameter("idBuque");
		String estado = getServletRequest().getParameter("estado");
		String fechaResolucionDE = getServletRequest().getParameter("fechaResolucionDE");
		String fechaNotificacion = getServletRequest().getParameter("fechaNotificacion");
		String fechaEmision = getServletRequest().getParameter("fechaEmision");
		String fechaExpiracion = getServletRequest().getParameter("fechaExpiracion");
		String resolucionDE = getServletRequest().getParameter("resolucionDE");
		String finalRes = getServletRequest().getParameter("final");
		
		
		TipoBuqueEmb tbe = new TipoBuqueEmb();
		if(idTipoBuqueEmb!=null&&!idTipoBuqueEmb.equals("")) tbe.setIdTipoBuqueEmb(new Long(idTipoBuqueEmb));
		else tbe = null;
		Double velocBuque = new Double(0);
		if(velocidadBuque!=null&&!velocidadBuque.equals("")) velocBuque = new Double(velocidadBuque);
		Double pot = new Double(0);
		if(potencia!=null&&!potencia.equals("")) pot = new Double(potencia);
		Long numCil = new Long(0);
		if(numeroCilindros!=null&&!numeroCilindros.equals("")) numCil = new Long(numeroCilindros);
		Long noMaq = new Long(0);
		if(noMaquinas!=null&&!noMaquinas.equals("")) numCil = new Long(noMaquinas);
		Double mng = new Double(0);
		if(manga!=null&&!manga.equals("")) mng = new Double(manga);
		Double cal = new Double(0);
		if(calado!=null&&!calado.equals("")) cal = new Double(calado);
		Double pntl = new Double(0);
		if(puntal!=null&&!puntal.equals("")) pntl = new Double(puntal);
		Double mdds = new Double(0);
		if(medidas!=null&&!medidas.equals("")) mdds = new Double(medidas);
		Double slor = new Double(0);
		if(eslora!=null&&!eslora.equals("")) slor = new Double(eslora);
		MaterialCasco mc = new MaterialCasco();
		if(idMaterial!=null&&!idMaterial.equals("")) mc.setIdMaterial(new Long(idMaterial));
		else mc = null;
		Double tb = new Double(0);
		if(trb!=null&&!trb.equals("")) tb = new Double(trb);
		Double tn = new Double(0);
		if(trn!=null&&!trn.equals("")) tn = new Double(trn);
		ServicioBuque sb = new ServicioBuque();
		
		if(idServicioBuque!=null&&!idServicioBuque.equals("")) sb.setIdServicioBuque(new Long(idServicioBuque));
		else sb = null;
		Puerto pto = new Puerto();
		if(idPuerto!=null&&!idPuerto.equals("")) pto.setIdPuerto(new Long(idPuerto));
		else pto = null;
		Long dm = new Long(0);
		if(dotacioMinima!=null&&!dotacioMinima.equals("")) numCil = new Long(dotacioMinima);
		Long cnt = new Long(0);
		if(contador!=null&&!contador.equals("")) cnt = new Long(contador);

//		Long numCil = new Long(0);
//		if(numeroCilindros!=null&&!numeroCilindros.equals("")) numCil = new Long(numeroCilindros);
//		Long numCil = new Long(0);
//		if(numeroCilindros!=null&&!numeroCilindros.equals("")) numCil = new Long(numeroCilindros);
		try{
		
			
			HashMap<String, Object> parametros = new HashMap<String, Object>();
			ArrayList<String> propiedades=new ArrayList<String>();
			ArrayList<Object> valores = new ArrayList<Object>();
			ArrayList<String> tiposConsulta = new ArrayList<String>();
			
			propiedades.add("idRegistroBuque");
			valores.add(new Long(idBuque));
			tiposConsulta.add(Consulta.IGUAL);
			
		
			
			parametros.put("propiedades", Listas.pasarListaArregloString(propiedades));
			parametros.put("valores", Listas.pasarListaArregloObjeto(valores));
			parametros.put("tiposConsulta", Listas.pasarListaArregloString(tiposConsulta));
			parametros.put("ordenarPor", "idRegistroBuque asc");
			
			listaBuq=servicioGenerico.cargarTodosV2(Buque.class, parametros, Constantes.SIN_LIMITE, Constantes.SIN_LIMITE);
			
			buque = listaBuq.get(0);
		
			buque.setNombreBuque(nombreBuque);
			buque.setIdTipoBuqueEmb(tbe);
			buque.setNumeroOficial(numeroOficial);
			buque.setNumeroOmi(numeroOmi);
			buque.setClaseMaquina(claseMaquina);
			buque.setFabricante(fabricante);
			buque.setModelo(modelo);
			buque.setMarca(marca);
			buque.setVelocidadBuque(velocBuque);
			buque.setNumeroCilindros(numCil);
			buque.setPotencia(pot);
			buque.setNoMaquinas(noMaq);
			buque.setManga(mng);
			buque.setCalado(cal);
			buque.setPuntal(pntl);
			buque.setMedidas(mdds);
			buque.setEslora(slor);
			buque.setColor(color);
			buque.setAnioQuilla(anioQuilla);
			buque.setAnioConstruccion(anioConstruccion);
			buque.setTrb(tb);
			buque.setTrn(tn);
			buque.setDistintivoLlamada(distintivoLlamada);
			buque.setIdServicioBuque(sb);
			buque.setIdPuerto(pto);
			buque.setUbicacionFisica(ubicacionFisica);
			buque.setDotacioMinima(dm);
			buque.setCombustible(combustible);
			buque.setConstruidoEn(construidoEn);
			buque.setConstructor(constructor);
			buque.setIdMaterial(mc);
			buque.setEstado(estado);
			
			buque.setFechaEmision(Fecha.traducirValorFechaNull(fechaEmision));
			buque.setFechaExpiracion(Fecha.traducirValorFechaNull(fechaExpiracion));
			buque.setFechaNotificacion(Fecha.traducirValorFechaNull(fechaNotificacion));
			buque.setFechaResolucionDe(Fecha.traducirValorFechaNull(fechaResolucionDE));
			buque.setResolucionDe(resolucionDE);
			
			UsuarioLogueado ul = obtenerUsuarioLogueado(getServletRequest());
			buque.setUsuario(ul.getCodUsuario());
			
			servicioGenerico.modificar(buque);
		
			
			auditBuque.setNombreBuque(nombreBuque);
			if(tbe!=null)
				auditBuque.setIdTipoBuqueEmb(tbe.getIdTipoBuqueEmb());
			auditBuque.setNumeroOficial(numeroOficial);
			auditBuque.setNumeroOmi(numeroOmi);
			auditBuque.setClaseMaquina(claseMaquina);
			auditBuque.setFabricante(fabricante);
			auditBuque.setModelo(modelo);
			auditBuque.setMarca(marca);
			auditBuque.setVelocidadBuque(velocBuque);
			auditBuque.setNumeroCilindros(numCil);
			auditBuque.setPotencia(pot);
			auditBuque.setNoMaquinas(noMaq);
			auditBuque.setManga(mng);
			auditBuque.setCalado(cal);
			auditBuque.setPuntal(pntl);
			auditBuque.setMedidas(mdds);
			auditBuque.setEslora(slor);
			auditBuque.setColor(color);
			auditBuque.setAnioQuilla(anioQuilla);
			auditBuque.setAnioConstruccion(anioConstruccion);
			auditBuque.setTrb(tb);
			auditBuque.setTrn(tn);
			auditBuque.setDistintivoLlamada(distintivoLlamada);
			if(sb!=null)
				auditBuque.setIdServicioBuque(sb.getIdServicioBuque());
			if(pto!=null)
				auditBuque.setIdPuerto(pto.getIdPuerto());
			auditBuque.setUbicacionFisica(ubicacionFisica);
			auditBuque.setDotacioMinima(dm);
			auditBuque.setCombustible(combustible);
			auditBuque.setConstruidoEn(construidoEn);
			auditBuque.setConstructor(constructor);
			if(mc!=null)
				auditBuque.setIdMaterial(mc.getIdMaterial());
			auditBuque.setEstado(estado);
			
			auditBuque.setFechaEmision(Fecha.traducirValorFechaNull(fechaEmision));
			auditBuque.setFechaExpiracion(Fecha.traducirValorFechaNull(fechaExpiracion));
			auditBuque.setFechaNotificacion(Fecha.traducirValorFechaNull(fechaNotificacion));
			auditBuque.setFechaResolucionDe(Fecha.traducirValorFechaNull(fechaResolucionDE));
			auditBuque.setResolucionDe(resolucionDE);
			
			auditBuque.setIdRegistroBuque(buque.getIdRegistroBuque());
			auditBuque.setUsuarioAudit(ul.getCodUsuario());
			auditBuque.setFechaAudit(new Date());
			auditBuque.setAccionAudit("UPDATE de buque");
			
			servicioGenerico.agregar(auditBuque);
		for(int i=0;i<=cnt;i++){
			String valorPersona = getServletRequest().getParameter("hdVal"+i);
			String valorPor = getServletRequest().getParameter("porcentajeVal"+i);
			if(valorPersona!=null &&!valorPersona.equals("")&&valorPor!=null&&!valorPor.equals("")){
				PersonaXRegistroBuque prb = new PersonaXRegistroBuque();
				Long idPer = new Long(valorPersona);
				Double porc = new Double(valorPor);
				List<PersonaXRegistroBuque> listaPerBuq=null;
				
				
				
				HashMap<String, Object> parametros2 = new HashMap<String, Object>();
				ArrayList<String> propiedades2=new ArrayList<String>();
				ArrayList<Object> valores2 = new ArrayList<Object>();
				ArrayList<String> tiposConsulta2 = new ArrayList<String>();
				
				propiedades2.add("personaBuquePk.idRegistroBuque");
				valores2.add(new Long(idBuque));
				tiposConsulta2.add(Consulta.IGUAL);
				
				propiedades2.add("personaBuquePk.idPersona");
				valores2.add(new Long(idPer));
				tiposConsulta2.add(Consulta.IGUAL);
				
				parametros2.put("propiedades", Listas.pasarListaArregloString(propiedades2));
				parametros2.put("valores", Listas.pasarListaArregloObjeto(valores2));
				parametros2.put("tiposConsulta", Listas.pasarListaArregloString(tiposConsulta2));
				parametros2.put("ordenarPor", "personaBuquePk.idPersona asc");
				
				listaPerBuq=servicioGenerico.cargarTodosV2(PersonaXRegistroBuque.class, parametros2, Constantes.SIN_LIMITE, Constantes.SIN_LIMITE);
			
				if(!listaPerBuq.isEmpty()){
					AuditPersonaXRegistroBuque aprb = new AuditPersonaXRegistroBuque();
					prb = listaPerBuq.get(0);
					prb.setPorcentaje(porc);
					prb.setUsuario(ul.getCodUsuario());
					servicioGenerico.modificar(prb);
					
					aprb.setIdRegistroBuque(buque.getIdRegistroBuque());
					aprb.setIdPersona(idPer);
					aprb.setPorcentaje(porc);
					aprb.setFechaInicio(new Date());
					
					aprb.setUsuarioAudit(ul.getCodUsuario());
					aprb.setFechaAudit(new Date());
					aprb.setAccionAudit("UPDATE de personas por buque");
					
					servicioGenerico.agregar(aprb);
					
				}else{
					AuditPersonaXRegistroBuque aprb = new AuditPersonaXRegistroBuque();
					PersonaBuquePk pbpk= new PersonaBuquePk();
					prb.setPersonaBuquePk(pbpk);
					prb.getPersonaBuquePk().setIdRegistroBuque(buque.getIdRegistroBuque());
					prb.getPersonaBuquePk().setIdPersona(idPer);
					prb.setPorcentaje(porc);
					prb.setFechaInicio(new Date());
					prb.setUsuario(ul.getCodUsuario());
					servicioGenerico.agregar(prb);
					
					aprb.setIdRegistroBuque(buque.getIdRegistroBuque());
					aprb.setIdPersona(idPer);
					aprb.setPorcentaje(porc);
					aprb.setFechaInicio(new Date());
					aprb.setUsuarioAudit(ul.getCodUsuario());
					aprb.setFechaAudit(new Date());
					aprb.setAccionAudit("INSERT de personas por buque");
					
					servicioGenerico.agregar(aprb);
				}
				
			}
		}
		
		
		
		
		JSONObject o = new JSONObject();
		o.put("idBuque",buque.getIdRegistroBuque() );
		if(finalRes!=null&&finalRes.equals("1")){
			o.put("exito", 1);
			o.put("mensaje", "Se Guardaron los Datos Exitosamente");
		}
			
		enviarJsonNavegador(o);
		}catch(Exception e){
			e.printStackTrace();
			enviarMensajeStatic("error~"+e.getCause().toString(), getServletResponse());
		}
	}
	

	
	public void agregar(){
		
		Buque buque  = new Buque();
		AuditBuque auditBuque = new AuditBuque();
		
		String nombreBuque = getServletRequest().getParameter("nombreBuque2");
		String idTipoBuqueEmb = getServletRequest().getParameter("idTipoBuqueEmb");
		String numeroOficial = getServletRequest().getParameter("numeroOficial2");
		String numeroOmi = getServletRequest().getParameter("numeroOmi");
		String claseMaquina = getServletRequest().getParameter("claseMaquina");
		String fabricante = getServletRequest().getParameter("fabricante");
		String modelo = getServletRequest().getParameter("modelo");
		String marca = getServletRequest().getParameter("marca");
		String velocidadBuque = getServletRequest().getParameter("velocidadBuque");
		String numeroCilindros = getServletRequest().getParameter("numeroCilindros");
		String potencia = getServletRequest().getParameter("potencia");
		String noMaquinas = getServletRequest().getParameter("noMaquinas");
		String manga = getServletRequest().getParameter("manga");
		String calado = getServletRequest().getParameter("calado");
		String puntal = getServletRequest().getParameter("puntal");
		String medidas = getServletRequest().getParameter("medidas");
		String eslora = getServletRequest().getParameter("eslora");
		String color = getServletRequest().getParameter("color");
		String idMaterial = getServletRequest().getParameter("idMaterial");
		String anioQuilla = getServletRequest().getParameter("anioQuilla");
		String anioConstruccion = getServletRequest().getParameter("anioConstruccion");
		String trb = getServletRequest().getParameter("trb");
		String trn = getServletRequest().getParameter("trn");
		String distintivoLlamada = getServletRequest().getParameter("distintivoLlamada");
		String idServicioBuque = getServletRequest().getParameter("idServicioBuque");
		String idPuerto = getServletRequest().getParameter("idPuerto");
		String ubicacionFisica = getServletRequest().getParameter("ubicacionFisica");
		String dotacioMinima = getServletRequest().getParameter("dotacioMinima");
		String combustible = getServletRequest().getParameter("combustible");
		String construidoEn = getServletRequest().getParameter("construidoEn");
		String constructor = getServletRequest().getParameter("constructor");
		String contador = getServletRequest().getParameter("contador");
		
		TipoBuqueEmb tbe = new TipoBuqueEmb();
		if(idTipoBuqueEmb!=null&&!idTipoBuqueEmb.equals("")) tbe.setIdTipoBuqueEmb(new Long(idTipoBuqueEmb));
		else tbe = null;
		Double velocBuque = new Double(0);
		if(velocidadBuque!=null&&!velocidadBuque.equals("")) velocBuque = new Double(velocidadBuque);
		Double pot = new Double(0);
		if(potencia!=null&&!potencia.equals("")) pot = new Double(potencia);
		Long numCil = new Long(0);
		if(numeroCilindros!=null&&!numeroCilindros.equals("")) numCil = new Long(numeroCilindros);
		Long noMaq = new Long(0);
		if(noMaquinas!=null&&!noMaquinas.equals("")) numCil = new Long(noMaquinas);
		Double mng = new Double(0);
		if(manga!=null&&!manga.equals("")) mng = new Double(manga);
		Double cal = new Double(0);
		if(calado!=null&&!calado.equals("")) cal = new Double(calado);
		Double pntl = new Double(0);
		if(puntal!=null&&!puntal.equals("")) pntl = new Double(puntal);
		Double mdds = new Double(0);
		if(medidas!=null&&!medidas.equals("")) mdds = new Double(medidas);
		Double slor = new Double(0);
		if(eslora!=null&&!eslora.equals("")) slor = new Double(eslora);
		MaterialCasco mc = new MaterialCasco();
		if(idMaterial!=null&&!idMaterial.equals("")) mc.setIdMaterial(new Long(idMaterial));
		else mc = null;
		Double tb = new Double(0);
		if(trb!=null&&!trb.equals("")) tb = new Double(trb);
		Double tn = new Double(0);
		if(trn!=null&&!trn.equals("")) tn = new Double(trn);
		ServicioBuque sb = new ServicioBuque();
		if(idServicioBuque!=null&&!idServicioBuque.equals("")) sb.setIdServicioBuque(new Long(idServicioBuque));
		else sb = null;
		Puerto pto = new Puerto();
		if(idPuerto!=null&&!idPuerto.equals("")) pto.setIdPuerto(new Long(idPuerto));
		else pto=null;
		Long dm = new Long(0);
		if(dotacioMinima!=null&&!dotacioMinima.equals("")) numCil = new Long(dotacioMinima);
		Long cnt = new Long(0);
		if(contador!=null&&!contador.equals("")) cnt = new Long(contador);

//		Long numCil = new Long(0);
//		if(numeroCilindros!=null&&!numeroCilindros.equals("")) numCil = new Long(numeroCilindros);
//		Long numCil = new Long(0);
//		if(numeroCilindros!=null&&!numeroCilindros.equals("")) numCil = new Long(numeroCilindros);
		
		buque.setNombreBuque(nombreBuque);
		buque.setIdTipoBuqueEmb(tbe);
		buque.setNumeroOficial(numeroOficial);
		buque.setNumeroOmi(numeroOmi);
		buque.setClaseMaquina(claseMaquina);
		buque.setFabricante(fabricante);
		buque.setModelo(modelo);
		buque.setMarca(marca);
		buque.setVelocidadBuque(velocBuque);
		buque.setNumeroCilindros(numCil);
		buque.setPotencia(pot);
		buque.setNoMaquinas(noMaq);
		buque.setManga(mng);
		buque.setCalado(cal);
		buque.setPuntal(pntl);
		buque.setMedidas(mdds);
		buque.setEslora(slor);
		buque.setColor(color);
		buque.setAnioQuilla(anioQuilla);
		buque.setAnioConstruccion(anioConstruccion);
		buque.setTrb(tb);
		buque.setTrn(tn);
		buque.setDistintivoLlamada(distintivoLlamada);
		buque.setIdServicioBuque(sb);
		buque.setIdPuerto(pto);
		buque.setUbicacionFisica(ubicacionFisica);
		buque.setDotacioMinima(dm);
		buque.setCombustible(combustible);
		buque.setConstruidoEn(construidoEn);
		buque.setConstructor(constructor);
		buque.setIdMaterial(mc);
		
		UsuarioLogueado ul = obtenerUsuarioLogueado(getServletRequest());
		buque.setUsuario(ul.getCodUsuario());
		
		
	
		
		try {
			servicioGenerico.agregar(buque);
		
			auditBuque.setNombreBuque(nombreBuque);
			if(tbe!=null)
			 auditBuque.setIdTipoBuqueEmb(tbe.getIdTipoBuqueEmb());
			auditBuque.setNumeroOficial(numeroOficial);
			auditBuque.setNumeroOmi(numeroOmi);
			auditBuque.setClaseMaquina(claseMaquina);
			auditBuque.setFabricante(fabricante);
			auditBuque.setModelo(modelo);
			auditBuque.setMarca(marca);
			auditBuque.setVelocidadBuque(velocBuque);
			auditBuque.setNumeroCilindros(numCil);
			auditBuque.setPotencia(pot);
			auditBuque.setNoMaquinas(noMaq);
			auditBuque.setManga(mng);
			auditBuque.setCalado(cal);
			auditBuque.setPuntal(pntl);
			auditBuque.setMedidas(mdds);
			auditBuque.setEslora(slor);
			auditBuque.setColor(color);
			auditBuque.setAnioQuilla(anioQuilla);
			auditBuque.setAnioConstruccion(anioConstruccion);
			auditBuque.setTrb(tb);
			auditBuque.setTrn(tn);
			auditBuque.setDistintivoLlamada(distintivoLlamada);
			if(sb!=null)
				auditBuque.setIdServicioBuque(sb.getIdServicioBuque());
			if(pto!=null)
				auditBuque.setIdPuerto(pto.getIdPuerto());
			auditBuque.setUbicacionFisica(ubicacionFisica);
			auditBuque.setDotacioMinima(dm);
			auditBuque.setCombustible(combustible);
			auditBuque.setConstruidoEn(construidoEn);
			auditBuque.setConstructor(constructor);
			if(mc!=null)
				auditBuque.setIdMaterial(mc.getIdMaterial());
			auditBuque.setIdRegistroBuque(buque.getIdRegistroBuque());
			auditBuque.setUsuarioAudit(ul.getCodUsuario());
			auditBuque.setFechaAudit(new Date());
			auditBuque.setAccionAudit("INSERT de buque");
			
			servicioGenerico.agregar(auditBuque);
			
		for(int i=0;i<=cnt;i++){
			String valorPersona = getServletRequest().getParameter("hdVal"+i);
			String valorPor = getServletRequest().getParameter("porcentajeVal"+i);
			if(valorPersona!=null &&!valorPersona.equals("")&&valorPor!=null&&!valorPor.equals("")){
				PersonaXRegistroBuque prb = new PersonaXRegistroBuque();
				AuditPersonaXRegistroBuque aprb = new AuditPersonaXRegistroBuque();
				PersonaBuquePk pbpk = new PersonaBuquePk();
				prb.setPersonaBuquePk(pbpk);
				Long idPer = new Long(valorPersona);
				Double porc = new Double(valorPor);
				prb.getPersonaBuquePk().setIdRegistroBuque(buque.getIdRegistroBuque());
				prb.getPersonaBuquePk().setIdPersona(idPer);
				prb.setPorcentaje(porc);
				prb.setFechaInicio(new Date());
				prb.setUsuario(ul.getCodUsuario());
				
				
				servicioGenerico.agregar(prb);
				
				aprb.setIdRegistroBuque(buque.getIdRegistroBuque());
				aprb.setIdPersona(idPer);
				aprb.setPorcentaje(porc);
				aprb.setFechaInicio(new Date());
				aprb.setUsuarioAudit(ul.getCodUsuario());
				aprb.setFechaAudit(new Date());
				aprb.setAccionAudit("INSERT de personas por buque");
				
				servicioGenerico.agregar(aprb);
				
			}
		}
		
		
		JSONObject o = new JSONObject();
		o.put("idBuque",buque.getIdRegistroBuque() );
		//o.put("exito", 1);
		enviarJsonNavegador(o);
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			enviarMensajeStatic("error~"+e.getCause().toString(), getServletResponse());
		}
	}
	
	
	
	
	
}
